import pluginVue from 'eslint-plugin-vue'
import vueTsEslintConfig from '@vue/eslint-config-typescript'
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'

export default [
  {
    name: 'app/files-to-lint',
    files: ['**/*.{ts,mts,tsx,vue}'],
  },

  {
    name: 'app/files-to-ignore',
    ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'],
  },

  ...pluginVue.configs['flat/essential'],
  ...vueTsEslintConfig(),
  skipFormatting,
  // 添加新的规则配置
  {
    rules: {
      //“off” 或 0 - 关闭规则 “warn” 或 1 - 打开规则作为警告（不影响退出代码） “error” 或 2 - 打开规则作为错误 (退出代码为 1)
      'no-console': process.env.NODE_ENV === 'production' ? 'off' : 'off',
      'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
      'key-spacing': ['error', { beforeColon: false, afterColon: true }], //强制对象字面量中的键值对之间的空格风格
      'space-in-parens': ['error', 'never'], //禁止在括号内使用空格
      'object-curly-spacing': ['error', 'always'], //强制在对象字面量中使用空格
      //'object-curly-newline': ['error', { minProperties: 4, multiline: true, consistent: true }], //强制在多行对象字面量中使用换行符
      'vue/object-curly-spacing': ['error', 'always'], //强制在 Vue 模板中的对象字面量中使用空格
      //'max-len': 'off', //禁用最大行长度限制
      'no-multi-spaces': 'error', //禁止在代码中使用多个连续空格
      'no-return-assign': 'off', //禁用禁止在返回语句中赋值
      //semi: ['error', 'always'],
      semi: ['warn', 'never'], //禁止使用分号作为语句结束符，但会发出警告
      eqeqeq: 'error', //强制使用 === 和 !== 进行比较
      'jsx-quotes': ['off', 'prefer-single'], //禁用强制使用单引号或双引号包裹 JSX 属性
      'jsx-a11y/click-events-have-key-events': 'off', //禁用强制在可点击元素上添加键盘事件
      'jsx-a11y/no-noninteractive-element-interactions': 'off', //禁用强制在非交互元素上添加交互行为
      'import/prefer-default-export': 'off', //禁用强制使用默认导出
      'import/extensions': 'off', //禁用强制在导入语句中指定文件扩展名
      'import/no-unresolved': 'off', //禁用强制检查导入的模块是否存在
      'no-param-reassign': 'off', //禁用禁止对函数参数重新赋值
      'vue/eqeqeq': ['error', 'always'], //强制在 Vue 模板中使用 === 和 !== 进行比较
      'vue/html-end-tags': 'error', //强制在 Vue 模板中闭合 HTML 标签
      'vue/no-spaces-around-equal-signs-in-attribute': 'error', //禁止在 Vue 模板的属性值中使用空格
      'vue/multi-word-component-names': 'off', //禁用强制 Vue 组件名称使用多个单词
      'vue/no-template-shadow': 'error', //禁止在 Vue 模板中使用模板变量的阴影
      'vue/require-prop-types': 'error', //强制在 Vue 组件中声明 prop 类型
      'vue/require-explicit-emits': 'error', //强制在 Vue 组件中显式声明 emits
      'vue/mustache-interpolation-spacing': ['error', 'always'], //强制在 Vue 模板的插值表达式中使用空格
      'vue/no-multi-spaces': 'error', //禁止在 Vue 模板中使用多个连续空格
      'vue/html-closing-bracket-newline': ['error', { singleline: 'never', multiline: 'always' }], //强制在 Vue 模板的 HTML 标签的结束括号之前换行
      'vue/html-self-closing': 'off', //禁用强制在 Vue 模板中使用自闭合标签
      'vue/block-lang': 'off', //禁用强制在 Vue 模板中使用正确的语言
      'vue/html-indent': ['error', 2, { attribute: 1, baseIndent: 1, closeBracket: 0, alignAttributesVertically: true, ignores: ['VExpressionContainer'] }], //强制在 Vue 模板中使用正确的缩进
      'vue/html-closing-bracket-spacing': ['error', { startTag: 'never', endTag: 'never', selfClosingTag: 'always' }], //强制在 Vue 模板中使用正确的空格
      // 'vue/max-attributes-per-line': ['error', { singleline: 3, multiline: 1 }], //强制在 Vue 模板中每行最多允许的属性数量
      'vue/attribute-hyphenation': 'off', //禁用强制在 Vue 模板中使用正确的属性命名
      '@typescript-eslint/no-shadow': 'off', //禁用禁止在作用域中声明与外部作用域同名的变量
      '@typescript-eslint/no-explicit-any': 'off', //禁用禁止使用 any 类型
      '@typescript-eslint/no-unused-vars': 'error', //强制使用未使用的变量
      '@typescript-eslint/ban-ts-comment': 'off', //禁用禁止使用 @ts-ignore 和 @ts-nocheck 注释
      //'@typescript-eslint/indent': 'off', //禁用强制使用正确的缩进
    },
  },
]
